package com.tinet.sistReserva.web;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.tinet.sistReserva.ejb.InterfazReservaBean;
import com.tinet.sistReserva.model.Reserva;
import com.tinet.sistReserva.model.Usuario;

/**
 * 
 * Clase ManagedBean de Reserva.
 * 
 * @author Frmancil
 */
@ManagedBean
@ViewScoped
public class ReservaManagedBean implements Serializable {

    /**
     * Numero serialVersionUID.
     */
    private static final long serialVersionUID = 1L;
    /**
     * Mapeo de EJB.
     */
    @EJB(mappedName = "reservaBean", name = "reservaBean")
    private transient InterfazReservaBean beanReserva;
    /**
     * Instanciando Reservas.
     */
    private Reserva reserva;
    /**
     * Listado de reservas.
     */
    private List<Reserva> reservas;
    /**
     * Mensaje a entregar por pantalla.
     */
    private String message;

    /**
     * Instanciador de nueva entidad sala para cada acceso a la clase.
     */
    @PostConstruct
    public void init() {
        if (this.reserva == null) {

            this.reserva = new Reserva();

        }
    }

    /**
     * 
     * Metodo que obtiene reserva.
     * 
     * @return Reserva.
     */
    public Reserva getReserva() {
        return reserva;
    }

    /**
     * 
     * Metodo que setea reserva.
     * 
     * @param reserva
     *            Reserva.
     */
    public void setReserva(Reserva reserva) {
        this.reserva = reserva;
    }

    /**
     * 
     * Recibe una reserva creada desde la capa web y la agrega a la base de
     * datos.
     * 
     * @return El valor de retorno indica la pagina a la que redirecciona el
     *         metodo, en este caso la pagina agregarReserva.
     */

    public String agregarReservaMG() {
        beanReserva.reservarSala(reserva);
        return "agregarReservaAdmin";
    }

    /**
     * 
     * Recibe una reserva creada desde la capa web y la agrega a la base de
     * datos.
     * 
     * @return El valor de retorno indica la pagina a la que redirecciona el
     *         metodo, en este caso la pagina agregarReserva.
     */
    public String agregarReservaUserMG() {
        beanReserva.reservarSala(reserva);
        return "agregarReservaUser";
    }

    /**
     * 
     * Metodo que borra reserva encontrada.
     * 
     * @return Retorna la redireccion a la pagina que corresponde.
     */
    public String borrarReservaMG() {
        beanReserva.eliminarReservaSala(reserva);
        return "listarReservasAdmin";
    }

    /**
     * 
     * Metodo que borra reserva encontrada.
     * 
     * @return Retorna la redireccion a la pagina que corresponde.
     */
    public String borrarReservaUsuarioMG() {
        beanReserva.eliminarReservaSala(reserva);
        return "listarReservasUser";
    }

    /**
     * Metodo que retorna la lista de todas las reservas.
     * 
     * @return Retorna una lista con todas las reservas que se encuentran en
     *         la base de datos.
     */
    public List<Reserva> listarMG() {
        reservas = beanReserva.listarReservas();
        return reservas;
    }

    /**
     * Metodo que retorna la lista de todas las reservas.
     * 
     * @param usuario
     *            Usuario al que le pertenecen las reservas a listar.
     * @return Retorna una lista con todas las reservas que se encuentran en
     *         la base de datos.
     */
    public List<Reserva> listarMisReservasMG(Usuario usuario) {
        reservas = beanReserva.listarMisReservas(usuario);
        return reservas;
    }

    /**
     * 
     * Growl.
     * 
     * @param msg
     *            String.
     */
    public void saveMessage(String msg) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Exito", "Your message: "
                + msg));
    }

    /**
     * Allows to get the message attribute value.
     * 
     * @return the message value.
     */
    public String getMessage() {
        return message;
    }

    /**
     * Allows to set the message attribute value.
     * 
     * @param message
     *            new value for message attribute.
     */
    public void setMessage(String message) {
        this.message = message;
    }

}
